home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / util / rexx / Rexxcontrol.lha / rexxcontrol / demo.rexx next >
OS/2 REXX Batch file  |  1996-07-05  |  15KB  |  384 lines

  1. /*  Test der rexxcontrol.library (Grundfunktionen)
  2.  *  Letzte Änderung: $VER: Demo.rexx 1.24 (1.3.96) © Uwe Schröder
  3.  */
  4.  
  5. signal on error
  6. signal on syntax
  7. options results
  8.  
  9. /* Library einbinden */
  10. call addlib('rexxcontrol.library',0,-30,0)
  11. version=rco_getvers() /* Arexx zwingen, die Library zu öffnen */
  12.  
  13. /* Schriftstile definieren */
  14. cr='0A'x;csi='9B'x;norm=csi'0m'csi'31m';fett=csi'1m';kur=csi'3m';weiss=csi'32m';blau=csi'33m'
  15.  
  16. /* Ausgabefenster öffnen */
  17. parse upper version ver
  18. m=find(ver,"NTSC")
  19. rows="160"
  20. if m=0 then rows="216"
  21. windowdef="RAW:70/25/535/"rows"/Test der rexxcontrol.library"
  22. call open(out,windowdef)
  23. if ~ result then exit 20
  24.  
  25. /* Dummy-Fenster öffnen, um Ausgabefenster zu inaktivieren */
  26. dummydef="CON:10/10/15/15/x/BACKDROP"
  27. call open(dummy,dummydef)
  28. if ~ result then exit 20
  29.  
  30. /* Es geht los */
  31. call writeln out,"Dieses ARexx-Skript demonstriert die Funktionen"
  32. call writeln out,"der"fett" rexxcontrol.library."norm cr
  33. call writeln out,"Die aktuelle Versionsnummer ist"blau version norm
  34. call writeln out,"Man kann sie mit"weiss "rco_getvers()"norm" erhalten."cr
  35. call writeln out,"ARexx erlaubt leider nur Eingaben im Consolefenster"
  36. call writeln out,"mittels PULL. Dazu braucht man ein aktives und sichtbares"
  37. call writeln out,"Fenster und Zeit zum Eintippen, denn eine Eingabe wird"
  38. call writeln out,"erst nach Druck auf die Returntaste erkannt. Bei der "
  39. call writeln out,"Steuerung von z.B. Videosoftware ein Unding, denn"
  40. call writeln out,"oft ist nur das Videobild sichtbar und eine Echtzeit-"
  41. call writeln out,"reaktion des Programms ist so auch nicht möglich."
  42. call writeln out,"Eine Lösung bieten die rexxcontrol.library-Funktionen,"
  43. call writeln out,"mit denen man unabhängig von Fenstern unmittelbar auf"
  44. call writeln out,"Tasten, Mausklicks oder Joystickbetätigung reagieren kann." cr
  45. call writeln out,weiss"rco_waitevent()"norm" wartet nun auf Tastendruck, Mausklick"
  46. call writeln out,"oder Betätigung der Feuertaste. (Wenn Sie allerdings"
  47. call writeln out,"eine Taste drücken, während ein CON:-Fenster aktiv"
  48. call writeln out,"ist, stoppt die Ausgabe, da der Cursor dann vom"
  49. call writeln out,"linken Rand wegbewegt wird. Dies kann man mit der"
  50. call writeln out,"Backspace-Taste korrigieren.)" cr
  51. call beep1
  52. call inaktiv
  53. call rco_waitevent()      /* auf irgendeinen Klick warten */
  54. if ende()=1 then signal abbruch
  55. call writeln out,"Wenn bei Videosoftware kein Computerbild sichtbar"
  56. call writeln out,"ist, ist es unmöglich, von ARexx irgendeine"
  57. call writeln out,"Rückmeldung zu erhalten, denn SAY funktioniert eben"
  58. call writeln out,"auch nur in sichtbaren Console-Fenstern."
  59. call Writeln out,"Als Ausgabesignale stellt die rexxcontrol.library"
  60. call writeln out,"einen variierbaren Signalton...."cr
  61. call rco_wait(240)
  62. call writeln out, "Hören Sie Ihn ?"cr
  63.  
  64. /* Beep in einer Schleife */
  65. do i=1 to 12
  66.  call rco_beep(i*100,6)
  67. end
  68. call rco_wait(10)
  69. do i=12 to 1 by -1
  70.  call rco_beep(i*100,6)
  71. end
  72. call writeln out,"....zur Verfügung, der mittels"weiss" rco_beep(n,m)"norm
  73. call writeln out,"(n=Frequenz, m=Dauer) aufgerufen werden kann."
  74. call writeln out,"Oder nur"weiss" rco_beep()"norm", was sich so anhört..."cr
  75. call writeln out,"Klicken Sie die "fett"linke"norm" Maustaste!"cr
  76. call rco_waitlmb()       /* auf Mausklick links warten */
  77. if ende() = 1 then signal abbruch
  78. call rco_beep()   /* ein einfacher Beep (langweilig) */
  79. call inaktiv
  80. call writeln out,"Mit "weiss"rco_waitlmb()"norm" wurde auf eine Betätigung der"
  81. call writeln out,"linken Maustaste gewartet (LeftMouseButton)."
  82. call writeln out,"Das geht auch mit der rechten Maustaste."
  83. call writeln out,weiss"rco_waitrmb()"norm "wartet darauf (RightMouseButton)."
  84. call writeln out,cr"Klicken Sie "fett"rechts"norm", dann geht's weiter!"cr
  85. call beep1
  86. call rco_waitrmb()      /* auf Mausklick rechts warten */
  87. if ende()=1 then signal abbruch
  88. /* Phone-Demo */
  89. sabbel=rco_phone("OH.") /* nur zum Test, ob Sprachausgabe funktioniert */
  90. if sabbel=0 then do
  91.   call writeln out,weiss"rco_phone(phonemstring)"norm" ermöglicht eine Sprachausgabe über"
  92.   call writeln out,"das narrator.device, damit ist eine weitere Möglichkeit"
  93.   call writeln out,"eines akustischen Signals gegeben. Hören Sie mal..."
  94.   call rco_wait(210)
  95.   call rco_phone("/HAH6LLOW4-, IY6RX AH3MIY5GAH VUH6IH6NSHT IY6NEH2N AY3NEH2N GUW4UHTEH2N TAH5AHK.")
  96. end
  97. else do
  98.   call writeln out,"Leider kann die Sprachausgabe über "weiss"rco_phone(String)"norm
  99.   call writeln out,"nicht demonstriert werden, da Ihnen anscheinend"
  100.   call writeln out,"das narrator.device im DEVS:-Verzeichnis fehlt."
  101.   call writeln out,"Schade."
  102.   call beep1
  103.   call rco_wait(180)
  104. end
  105. call writeln out,cr"Wir können natürlich auch ein optisches Signal"
  106. call writeln out,"ausgeben. Wenn es nicht bei Videoarbeiten stört,"
  107. call writeln out,"z.B. mit der DisplayBeep-Routine des Amiga-OS,"
  108. call writeln out,"die Sie sicher von Fehleranzeigen der Workbench kennen."
  109. call writeln out,cr"Klicken Sie einmal die "fett"linke"norm" Maustaste, um ein paar mal"
  110. call writeln out,"dieses Signal mit "weiss"rco_displaybeep()"norm" aufzurufen!"
  111. call beep1
  112. call rco_waitlmb()
  113. if ende()=1 then signal abbruch
  114.  
  115. /* DisplayBeep */
  116. do i=1 to 4
  117.  call rco_displaybeep()
  118.  call rco_wait(40)
  119. end
  120. call writeln out,cr"Wenn ein Bildschirmsignal stören würde, bietet sich"
  121. call writeln out,"als stummes Signal die Betriebsanzeige-Leuchtdiode"
  122. call writeln out,"des Amiga an."cr
  123. call writeln out,"Beachten Sie nun die Power-LED an Ihrem Rechner!"
  124. call writeln out,"Keine Panik, das ist kein Absturz, sondern ein"
  125. call writeln out,"Blinksignal, das Sie mit "weiss"rco_ledflash(n,m)"norm" auslösen"
  126. call writeln out,"können (n=Anzahl Blinks m=Blinkfrequenz)."cr
  127. call writeln out,"Drücken Sie vorher irgendeine Taste auf der"
  128. call writeln out,"Tastatur. "weiss"rco_waitforkey()"norm" wartet darauf."cr
  129. call inaktiv
  130. call beep1
  131. taste=rco_waitforkey()  /* auf Tastaturbetätigung warten */
  132. if ende()=1 then signal abbruch
  133. call writeln out, fett"Beachten Sie die Power-LED !"norm
  134. call rco_wait(40)
  135. /* LEDFlash */
  136. do i=3 to 10
  137.  call rco_ledflash(i-1,i)
  138. end
  139. do i=9 to 3 by -1
  140.  call rco_ledflash(i-1,i)
  141. end
  142. call beep1
  143. call writeln out,cr"Sie hatten übrigens die Taste mit dem RAW-KeyCode"
  144. call writeln out,blau||taste norm"gedrückt. Das war die result-Variable von"
  145. call writeln out,weiss"rco_waitforkey()"norm". Mit "weiss"rco_getrawkey()"norm" kann man"
  146. call writeln out,"die Tastatur in Echtzeit abfragen, was wir nun"
  147. call writeln out,"ausprobieren wollen. Klicken Sie vorher aber bitte"
  148. call writeln out,"einmal mit der "blau"**"norm||fett"linken"norm||blau"**"norm" Maustaste "blau"**"norm||fett"außerhalb"norm||blau"**"norm
  149. call writeln out,"des Ausgabefensters, um es zu inaktivieren"
  150. call writeln out,"und die Ausgabe nicht zu stören!"
  151. call beep1
  152. call rco_waitlmb()
  153. if ende()=1 then signal abbruch
  154. call inaktiv
  155. call writeln out,cr"Wenn Sie nun eine Taste auf Ihrer Rechnertastatur"
  156. call writeln out,"drücken, wird der zur jeweiligen Taste gehörende"
  157. call writeln out,"RAW-KeyCode angezeigt. Die Leertaste hat z.B. den"
  158. call writeln out,"Wert 64. Die Eingabetaste hat 68. "
  159. call writeln out,"Drücken Sie die ESC-Taste, um diesen Testteil zu"
  160. call writeln out,"beenden!"
  161. call writeln out,weiss"rco_waitforkey()"norm" wartet jetzt erst mal auf einen"
  162. call writeln out,"Tastendruck."cr
  163. call beep1
  164. call inaktiv
  165. esctaste=69
  166. call rco_waitforkey()
  167. if ende()=1 then signal abbruch
  168.  
  169. /* Tastatur RAW-Code */
  170. do forever
  171.  taste=rco_getrawkey()
  172.  call writeln out, "(ESC beendet) aktueller Tastencode ="blau taste norm
  173.  if taste=esctaste then leave
  174. end
  175. call writeln out,cr"Wie bei der Tastatur, können wir auch den Status der"
  176. call writeln out,"Maustasten auslesen, hier gibt es für linke und rechte"
  177. call writeln out,"Taste jeweils das Resultat "blau"Pressed"norm" oder "blau"NotPressed"norm"."
  178. call writeln out,weiss"rco_getlmb()"norm" und "weiss"rco_getrmb()"norm" sind hierfür zuständig."
  179. call writeln out,"(Wenn Sie eine 3-Tasten-Maus haben, können Sie mit"
  180. call writeln out,weiss"rco_getmmb()"norm" auch die mittlere Maustaste abfragen."
  181. call writeln out,"Aus Kompatibilitätsgründen soll dies hier jedoch"
  182. call writeln out,"nicht demonstriert werden.)"cr
  183. call writeln out,"Der Test beginnt, wenn sie die "blau"**"norm||fett"rechte"norm||blau"**"norm" Maustaste"
  184. call writeln out,"klicken. "weiss"rco_waitrmb()"norm" wartet darauf.Beenden Sie diesen"
  185. call writeln out,"Testteil wieder mit der ESC-Taste! (Beim Druck auf die"
  186. call writeln out,"rechte Maustaste wird die Ausgabe angehalten und die"
  187. call writeln out,"Workbench-Menüleiste erscheint, das liegt am AMIGA."
  188. call writeln out,"Lassen Sie dann die rechte Taste wieder los. Ab OS 2.04"
  189. call writeln out,"stoppt die Ausgabe auch, wenn Sie die linke Maustaste"
  190. call writeln out,"außerhalb des Ausgabefensters betätigen.)"
  191. call beep1
  192. call rco_waitrmb()
  193. if ende()=1 then signal abbruch
  194. do forever
  195.  taste=rco_getrawkey()
  196.  if taste=esctaste then leave
  197.  lmb=rco_getlmb()     /* Status Left Mouse Button */
  198.  if lmb='Pressed' then lmb=lmb'   '
  199.  rmb=rco_getrmb()     /* Status Right Mouse Button */
  200.  call writeln out, "(ESC beendet) LMB:"blau lmb norm" RMB:"blau rmb norm
  201. end
  202. call inaktiv
  203. call beep1
  204. call writeln out,cr"Einen Moment mal..."cr
  205. call rco_wait()       /* warten */
  206. call writeln out,"Mit "weiss"rco_wait(n)"norm" können wir die Abarbeitung des Skripts"
  207. call writeln out,"n 1/50 Sekunden verzögern..."
  208. call beep1
  209. call rco_wait(500)    /* 10 Sekunden warten */
  210. call beep1
  211. call writeln out,cr"So, 10 Sekunden Erholungspause (für den Amiga!)"
  212. call writeln out,"sind vorbei!"cr
  213. call writeln out,"Der folgende Testteil benötigt einen angeschlossenen"
  214. call writeln out,"Joystick ! (Am Joystickport des Amiga.)"
  215. call writeln out,"Drücken Sie ESC, wenn Sie keinen Joystick angeschlossen"
  216. call writeln out,"haben, um diesen Teil zu überspringen. Betätigen Sie"
  217. call writeln out,"die Leertaste (Space), um die Joystickfunktionen"
  218. call writeln out,"auszuprobieren."cr
  219. spacetaste=64
  220. call inaktiv
  221. call beep1
  222.  
  223. /* Joystickfunktionen */
  224. do forever
  225.  taste=rco_waitforkey()
  226.  if taste=esctaste then leave
  227.  if taste=spacetaste then leave
  228.  call writeln out, "ESC oder Leertaste!"
  229.  call rco_beep(700,20)
  230. end
  231. call writeln out, " "
  232. if taste=spacetaste then do
  233.   call writeln out,weiss"rco_waitfire()"norm" wartet, bis der Feuerknopf gedrückt"
  234.   call writeln out,"wird. Tun Sie es, dann geht's weiter."
  235.   call beep1
  236.   call rco_waitfire()   /* auf Klick der Feuertaste warten */
  237.   call rco_wait(20)
  238.   call writeln out,cr"Mit "weiss"rco_getfire()"norm" erhalten wir den Status der Feuer-"
  239.   call writeln out,"taste, "weiss"rco_getjoy()"norm" gibt uns die Stellung des Sticks"
  240.   call writeln out,"zurück. (Diagonalstellungen werden z.Z. nicht aus-"
  241.   call writeln out,"gewertet.) Drücken Sie wieder die Feuertaste, dann"
  242.   call writeln out,"kann's losgehen. Ende wieder mit ESC."
  243.   call rco_wait(29)
  244.   call rco_waitfire()
  245.   do forever
  246.    taste=rco_getrawkey()
  247.    if taste=esctaste then leave
  248.    fire=rco_getfire()
  249.    if fire='Pressed' then fire=fire'   '
  250.    call rco_getjoy()   /* Status Joystickhebel holen */
  251.    call writeln out, "(ESC beendet)  Fire:"blau fire norm" Stickposition:"blau result norm
  252.   end
  253.  end
  254. else do
  255.   call writeln out,"Hä, kein Joystick ?  Sie sind wohl kein Spieler ?!"
  256.  end
  257. call writeln out,cr"Möchten Sie Ihren Amiga-Screen auf Videoband aufzeichnen,"
  258. call writeln out,"z.B. für einen Titel? Dann gibt es zwei störende Probleme:"
  259. call writeln out,"Erstens den Mauszeiger und zweitens die Tatsache, daß sich"
  260. call writeln out,"eine Videoaufzeichnung eines Bildschirms im Non-Lace-Modus"
  261. call writeln out,"nur schlecht im schnellen Bildsuchlauf betrachten läßt und"
  262. call writeln out,"beim Kopieren evtl. Probleme auftauchen. Für eine Video-"
  263. call writeln out,"aufzeichnung empfehle ich daher, daß Display in den Lace-"
  264. call writeln out,"Modus zu schalten, wie es auch ein Genlock bei anliegendem"
  265. call writeln out,"Videosignal macht, um dem Amiga ein korrektes Fernsehsignal"
  266. call writeln out,"zu entlocken."
  267. call writeln out,cr"Steuern Sie Ihre Aufzeichnung über ARexx, sind jetzt beide"
  268. call writeln out,"Probleme gelöst, denn es gibt dafür die Funktionen"
  269. call writeln out,weiss"rco_pointer(ON|OFF)"norm" und "weiss"rco_lace(ON|OFF)"norm"."
  270. call writeln out,cr"Klicken Sie die "fett"linke"norm" Maustaste, um das einmal zu"
  271. call writeln out,"demonstrieren!"
  272. call beep1
  273. call rco_waitlmb()
  274. if ende()=1 then signal abbruch
  275. call rco_lace(ON)
  276. call rco_pointer(OFF)
  277. call writeln out,cr"Schwupp, weg isser, der Mauszeiger!"
  278. call writeln out,cr"Nun ja, es flimmert mächtig gewaltig, aber dieser Modus"
  279. call writeln out,"ist auch nur für die Videoaufzeichnung gedacht."cr
  280. call rco_wait()
  281. call writeln out,"Klicken Sie mit der "fett"linken"norm" Maustaste, um in den"
  282. call writeln out,"Arbeitsmodus zurückzukehren und den Mauszeiger"
  283. call writeln out,"wieder erscheinen zu lassen."
  284. call beep1
  285. call rco_waitlmb()
  286. if ende()=1 then signal abbruch
  287. call rco_lace(OFF)
  288. call rco_pointer(ON)
  289. call inaktiv
  290. call writeln out,cr"Dank "weiss"rco_lace(OFF)"norm" und "weiss"rco_pointer(ON)"norm" ist"
  291. call writeln out,"jetzt alles wieder beim alten."cr
  292. call beep1
  293. call writeln out,"So, jetzt haben wir (fast) alle Grundfunktionen"
  294. call writeln out,"durchprobiert. Sämtliche Funktionen, auch die"
  295. call writeln out,"Zusatzfunktionen für FrameMachine/Prism24 sind"
  296. call writeln out,"ausführlich in der AmigaGuide-Datei "fett"rexxcontrol.guide"norm
  297. call writeln out,"erläutert."cr
  298. call writeln out,"Drücken Sie die linke Maustaste, um das Skript zu"
  299. call writeln out,"beenden und dieses Fenster zu schließen."
  300. call beep1
  301. call rco_waitlmb()
  302. if sabbel=0 then do
  303.  call rco_phone("fiy8iy8l shpah6ah8ah6s mih4t deh8eh7n fuh5nktih4ow6neh3n")
  304.  call rco_phone("dae5r reh9kskoh5ntrow6l lay5brae4riy3. . .")
  305.  call rco_phone(" - . . . aw8f viy8iy8deh5rzeh4/heh3n.")
  306. end
  307. call writeln out, cr"Tschüß!"
  308. call rco_beep(100,40)
  309. call rco_wait(20)
  310. exit
  311.  
  312. abbruch:
  313. signal off syntax
  314. call close out
  315. say "Das Skript wurde abgebrochen!"
  316. call verz(5)
  317. exit
  318.  
  319. error:
  320. signal off error
  321. say "Fehler Nr." rc "aufgetreten in Zeile Nr." sigl "!"
  322. say errortext(rc)
  323. call verz(8)
  324. exit
  325.  
  326. syntax:
  327. signal off syntax
  328. if rc=14 then do  /* Lib wurde nicht gefunden */
  329.  call remlib('rexxcontrol.library')
  330.  say"ACHTUNG!"
  331.  say" "
  332.  say"Die rexxcontrol.library ist nicht verfügbar und konnte nicht"
  333.  say"geöffnet werden. Kopieren Sie sie bitte in das Verzeichnis"
  334.  say"LIBS: Ihrer Bootpartition/-diskette und starten Sie dann das"
  335.  say"Skript noch einmal!"
  336.  say" "
  337.  call verz(11)
  338.  exit
  339. end
  340. else do
  341.  say "Fehler Nr." rc "aufgetreten in Zeile Nr." sigl "!"
  342.  say errortext(rc)
  343.  call verz(8)
  344.  exit
  345. end
  346.  
  347. /* Hauptfenster inaktivieren, um bei Tastendruck nicht die weitere
  348.    Ausgabe zu blockieren */
  349. inaktiv:
  350. call close(dummy)
  351. call open(dummy,dummydef)
  352. return
  353.  
  354. /* Piepser ausgeben */
  355. beep1:
  356. call rco_beep(1200,6)
  357. return
  358.  
  359. /* Abbruch des Skripts bei Druck auf LMB und RMB */
  360. ende:
  361. call rco_getrmb()
  362. if result="NotPressed" then return 0
  363. call rco_getlmb()
  364. if result="NotPressed" then return 0
  365. return 1
  366.  
  367. /* Verzögerung (natürlich nur, wenn sich rco_delay() nicht benutzen läßt!)
  368.    Solche Loops sind Mist!
  369.    (Kann aber immer noch als schlechtes Beispiel dienen!) */
  370. verz:
  371. arg verzwert
  372. do i=1 to verzwert*1000
  373.  nop
  374.  nop
  375.  nop
  376.  nop
  377. end
  378. return 0
  379.  
  380. /* Ende des Skripts */
  381.  
  382.  
  383.  
  384.